package vip.xiaonuo.generator.velocity;



import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.apache.commons.lang3.StringUtils;

import java.io.File;

public class VelocityGen {

    /**
     * 启动
     **/
    public static void main(String[] args) {
        commonCreate();
    }

    /**
     * 代码生成
     */
    public static void commonCreate() {

        System.setProperty("file.encoding", "UTF-8");

        // ---------  参数配置区域 开始  ---------------
        //  获取项目根目录
        String assembleIcpCodePath = System.getProperty("user.dir");
        // 项目根目录 +  模块名称  （ windows: / 跟 \\ 效果一样 ）
        String finalProjectPath = assembleIcpCodePath + File.separator +"snowy-plugin"+File.separator+ "snowy-plugin-smzq";

        //获取数据库配置， 根据需要 DbConfig 按照格式添加自己用到的  数据库配置

        // 作者
        String author = "sqq";
        // 父包名
//        String packageName = GenPathUtil.PACKAGE_PARENT + "." + GenPathUtil.PACKAGE_ANALYSIS;
        String packageName = "vip.xiaonuo.smzq"+"."+"modular";
        // 模块名称,
        String moduleName = "synchronize";
        // 表名集合， 多表 用逗号隔开 ：   aaa,bbb,ccc
        String tables = "sys_table_fields";
        // 表前缀：mds_
        String tablePrefix = "sys";
        // ---------  参数配置区域 结束  ---------------

        // 开始生成代码
//        FastAutoGenerator.create(dbConfig.getUrl(), dbConfig.getUsername(), dbConfig.getPassword())
        FastAutoGenerator.create("jdbc:postgresql://127.0.0.1:5432/ks_smzq_onlineall?currentSchema=public",
                "root", "root")
                // 全局配置
                .globalConfig(builder -> {
                    builder.author(author) // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
                            .disableOpenDir() //禁止打开输出目录
                            .outputDir(finalProjectPath + "/src/main/java"); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent(packageName) // 设置父包名
                            .moduleName(moduleName); // 设置父包模块名

                })
                // 模板配置
                .templateConfig(builder -> {
                    builder.disable(TemplateType.XML);//不生成XML文件
                    // 禁用模板
//                    builder.disable(TemplateType.CONTROLLER,TemplateType.SERVICE,TemplateType.SERVICE_IMPL
//                    ,TemplateType.MAPPER,TemplateType.XML);
                })
                //策略：表名
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok()//使用lombok
                            .logicDeleteColumnName("is_deleted")//逻辑删除字段名
                            .addTableFills(new Column("create_time", FieldFill.INSERT))//自动填充配置
                            .addTableFills(new Column("create_by", FieldFill.INSERT))
                            .addTableFills(new Column("update_time", FieldFill.UPDATE))//自动填充配置
                            .addTableFills(new Column("update_by", FieldFill.UPDATE))
                            .enableTableFieldAnnotation()//字段注解
                            .idType(IdType.ASSIGN_UUID);//主键注解
                    //添加表前缀
                    if (StringUtils.isNotBlank(tablePrefix)) {
                        builder.enableSchema().addTablePrefix(tablePrefix);
                    }
                    builder.controllerBuilder()
                            .enableHyphenStyle()// 开启驼峰
                            .enableRestStyle();//开启RestController
                    builder.addInclude(tables);
                })
                //执行
                .execute();

    }
}
